/*!
 * # 参数列表实体类:
 *  Count - 未读通知数目
 * 
 * # 描述:
 *  查询当前用户已经接收到的，尚未读取的通知的总数。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using Pittypat;

namespace Waln.Notifying.Unread.Args
{
    /// <summary>
    /// 功能 未读通知数目 的参数列表。
    /// </summary>
    [global::Pittypat.Function(Transaction = false)]
    public sealed class Count : global::Pittypat.FunctionArgs
    {
        #region 构造函数

        /// <summary>
        /// 初始化 Count 类的一个新实例。
        /// </summary>
        public Count()
        {
            // 接收用户的 Id
            this.ReceiverId = null;
            // 通知数目
            this.Total = null;
        }

        #endregion

        #region 属性

        /// <summary>
        /// 获取或者设置接收用户的 Id。
        /// </summary>
        /// <remarks>
        /// 接收消息的用户的 Id，如果是广播消息，则为 null。
        /// </remarks>
        [global::Pittypat.Parameter(0, Role = global::Pittypat.ParameterRole.UserId)]
        public @uuid? ReceiverId { get; set; }

        /// <summary>
        /// 获取或者设置通知数目。
        /// </summary>
        /// <remarks>
        /// 用户已经接收的，但是尚未读取的通知的总数。
        /// </remarks>
        [global::Pittypat.Parameter(1, Direction = global::Pittypat.ParameterDirection.Out)]
        public @int64? Total { get; set; }

        /// <summary>
        /// 获取或者设置指定名称的参数值。
        /// </summary>
        /// <param name="name">参数名称，不区分大小写。</param>
        /// <returns>目标名称的参数值。如果参数不存在，则返回 null。</returns>
        /// <exception cref="global::System.ArgumentException">设置参数值时发现参数不存在。</exception>
        public override object this[string name]
        {
            get
            {
                if (string.IsNullOrEmpty(name))
                {
                    return null;
                }

                switch (name.ToLower())
                {
                    case "receiverid":
                        return this.ReceiverId;
                    case "total":
                        return this.Total;
                    default:
                        return null;
                }
            }
            set
            {
                if (string.IsNullOrEmpty(name))
                {
                    throw new global::System.ArgumentException("没有提供有效的参数名称。", "name");
                }

                switch (name.ToLower())
                {
                    case "receiverid":
                        this.ReceiverId = (@uuid?)value;
                        break;
                    case "total":
                        this.Total = (@int64?)value;
                        break;
                    default:
                        throw new global::System.ArgumentException(name + " 不是 " + this.GetType().Name + " 的有效参数属性名称。", "name");
                }
            }
        }

        #endregion

        #region 方法

        /// <summary>
        /// 将当前对象作为 JSON 字符串写入指定的文本流。
        /// </summary>
        /// <param name="writer">目标文本流。</param>
        /// <exception cref="global::System.ArgumentNullException">writer 是 null。</exception>
        public override void Write(global::System.IO.TextWriter writer)
        {
            if (writer == null)
            {
                throw new global::System.ArgumentNullException("writer");
            }

            writer.Write('{');

            // 接收用户的 Id
            writer.Write("\"receiverId\":");
            this.ReceiverId.Write(writer);
            writer.Write(',');

            // 通知数目
            writer.Write("\"total\":");
            this.Total.Write(writer);

            writer.Write('}');
        }

        #endregion
    }
}
